//
//  JGWinKeyboardDefault.h
//  JGInputDriver
//
//  Created by jagger.tu on 2025/4/17.
//

#ifndef JGWinKeyboardDefault_h
#define JGWinKeyboardDefault_h

///https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

// Virtual Key Codes (from Windows API)
#define VK_LBUTTON        0x01
#define VK_RBUTTON        0x02
#define VK_CANCEL         0x03
#define VK_MBUTTON        0x04
#define VK_XBUTTON1       0x05
#define VK_XBUTTON2       0x06
#define VK_BACK           0x08
#define VK_TAB            0x09
#define VK_CLEAR          0x0C
#define VK_RETURN         0x0D
#define VK_SHIFT          0x10
#define VK_CONTROL        0x11
#define VK_MENU           0x12
#define VK_PAUSE          0x13
#define VK_CAPITAL        0x14
#define VK_KANA           0x15
#define VK_HANGUL         0x15
#define VK_IME_ON         0x16
#define VK_JUNJA          0x17
#define VK_FINAL          0x18
#define VK_HANJA          0x19
#define VK_KANJI          0x19
#define VK_IME_OFF        0x1A
#define VK_ESCAPE         0x1B
#define VK_CONVERT        0x1C
#define VK_NONCONVERT     0x1D
#define VK_ACCEPT         0x1E
#define VK_MODECHANGE     0x1F
#define VK_SPACE          0x20
#define VK_PRIOR          0x21
#define VK_NEXT           0x22
#define VK_END            0x23
#define VK_HOME           0x24
#define VK_LEFT           0x25
#define VK_UP             0x26
#define VK_RIGHT          0x27
#define VK_DOWN           0x28
#define VK_SELECT         0x29
#define VK_PRINT          0x2A
#define VK_EXECUTE        0x2B
#define VK_SNAPSHOT       0x2C
#define VK_INSERT         0x2D
#define VK_DELETE         0x2E
#define VK_HELP           0x2F

// 0-9 keys (same as ASCII)
#define VK_0             0x30
#define VK_1             0x31
#define VK_2             0x32
#define VK_3             0x33
#define VK_4             0x34
#define VK_5             0x35
#define VK_6             0x36
#define VK_7             0x37
#define VK_8             0x38
#define VK_9             0x39

// A-Z keys (same as ASCII)
#define VK_A             0x41
#define VK_B             0x42
#define VK_C             0x43
#define VK_D             0x44
#define VK_E             0x45
#define VK_F             0x46
#define VK_G             0x47
#define VK_H             0x48
#define VK_I             0x49
#define VK_J             0x4A
#define VK_K             0x4B
#define VK_L             0x4C
#define VK_M             0x4D
#define VK_N             0x4E
#define VK_O             0x4F
#define VK_P             0x50
#define VK_Q             0x51
#define VK_R             0x52
#define VK_S             0x53
#define VK_T             0x54
#define VK_U             0x55
#define VK_V             0x56
#define VK_W             0x57
#define VK_X             0x58
#define VK_Y             0x59
#define VK_Z             0x5A

#define VK_LWIN          0x5B
#define VK_RWIN          0x5C
#define VK_APPS          0x5D
#define VK_SLEEP         0x5F

// Numeric keypad
#define VK_NUMPAD0       0x60
#define VK_NUMPAD1       0x61
#define VK_NUMPAD2       0x62
#define VK_NUMPAD3       0x63
#define VK_NUMPAD4       0x64
#define VK_NUMPAD5       0x65
#define VK_NUMPAD6       0x66
#define VK_NUMPAD7       0x67
#define VK_NUMPAD8       0x68
#define VK_NUMPAD9       0x69
#define VK_MULTIPLY      0x6A
#define VK_ADD           0x6B
#define VK_SEPARATOR     0x6C
#define VK_SUBTRACT      0x6D
#define VK_DECIMAL       0x6E
#define VK_DIVIDE        0x6F

// Function keys
#define VK_F1            0x70
#define VK_F2            0x71
#define VK_F3            0x72
#define VK_F4            0x73
#define VK_F5            0x74
#define VK_F6            0x75
#define VK_F7            0x76
#define VK_F8            0x77
#define VK_F9            0x78
#define VK_F10           0x79
#define VK_F11           0x7A
#define VK_F12           0x7B
#define VK_F13           0x7C
#define VK_F14           0x7D
#define VK_F15           0x7E
#define VK_F16           0x7F
#define VK_F17           0x80
#define VK_F18           0x81
#define VK_F19           0x82
#define VK_F20           0x83
#define VK_F21           0x84
#define VK_F22           0x85
#define VK_F23           0x86
#define VK_F24           0x87

// Modifier keys
#define VK_NUMLOCK       0x90
#define VK_SCROLL        0x91
#define VK_LSHIFT        0xA0
#define VK_RSHIFT        0xA1
#define VK_LCONTROL      0xA2
#define VK_RCONTROL      0xA3
#define VK_LMENU         0xA4
#define VK_RMENU         0xA5

// OEM specific
#define VK_OEM_1         0xBA   // ';:' for US
#define VK_OEM_PLUS      0xBB   // '+' any country
#define VK_OEM_COMMA     0xBC   // '' any country
#define VK_OEM_MINUS     0xBD   // '-' any country
#define VK_OEM_PERIOD    0xBE   // '.' any country
#define VK_OEM_2         0xBF   // '/?' for US
#define VK_OEM_3         0xC0   // '`~' for US
#define VK_OEM_4         0xDB   // '[{' for US
#define VK_OEM_5         0xDC   // '\|' for US
#define VK_OEM_6         0xDD   // ']}' for US
#define VK_OEM_7         0xDE   // ''"' for US
#define VK_OEM_8         0xDF
#define VK_OEM_102       0xE2   // '<>' or '\|' on RT 102-key keyboard

// Media keys (not in standard VK list but commonly used)
#define VK_VOLUME_MUTE   0xAD
#define VK_VOLUME_DOWN   0xAE
#define VK_VOLUME_UP     0xAF
#define VK_MEDIA_NEXT_TRACK 0xB0
#define VK_MEDIA_PREV_TRACK 0xB1
#define VK_MEDIA_STOP    0xB2
#define VK_MEDIA_PLAY_PAUSE 0xB3
#define VK_LAUNCH_MAIL   0xB4
#define VK_LAUNCH_MEDIA_SELECT 0xB5
#define VK_LAUNCH_APP1   0xB6
#define VK_LAUNCH_APP2   0xB7

// Browser keys
#define VK_BROWSER_BACK      0xA6
#define VK_BROWSER_FORWARD   0xA7
#define VK_BROWSER_REFRESH   0xA8
#define VK_BROWSER_STOP      0xA9
#define VK_BROWSER_SEARCH    0xAA
#define VK_BROWSER_FAVORITES 0xAB
#define VK_BROWSER_HOME      0xAC

#define VK_JG_SWITCH         0x5DFF


///macOS keyboard

 #define MAC_VK_ANSI_A                    0x00
 #define MAC_VK_ANSI_S                    0x01
 #define MAC_VK_ANSI_D                    0x02
 #define MAC_VK_ANSI_F                    0x03
 #define MAC_VK_ANSI_H                    0x04
 #define MAC_VK_ANSI_G                    0x05
 #define MAC_VK_ANSI_Z                    0x06
 #define MAC_VK_ANSI_X                    0x07
 #define MAC_VK_ANSI_C                    0x08
 #define MAC_VK_ANSI_V                    0x09
 #define MAC_VK_ANSI_B                    0x0B
 #define MAC_VK_ANSI_Q                    0x0C
 #define MAC_VK_ANSI_W                    0x0D
 #define MAC_VK_ANSI_E                    0x0E
 #define MAC_VK_ANSI_R                    0x0F
 #define MAC_VK_ANSI_Y                    0x10
 #define MAC_VK_ANSI_T                    0x11
 #define MAC_VK_ANSI_1                    0x12
 #define MAC_VK_ANSI_2                    0x13
 #define MAC_VK_ANSI_3                    0x14
 #define MAC_VK_ANSI_4                    0x15
 #define MAC_VK_ANSI_6                    0x16
 #define MAC_VK_ANSI_5                    0x17
 #define MAC_VK_ANSI_Equal                0x18
 #define MAC_VK_ANSI_9                    0x19
 #define MAC_VK_ANSI_7                    0x1A
 #define MAC_VK_ANSI_Minus                0x1B
 #define MAC_VK_ANSI_8                    0x1C
 #define MAC_VK_ANSI_0                    0x1D
 #define MAC_VK_ANSI_RightBracket         0x1E
 #define MAC_VK_ANSI_O                    0x1F
 #define MAC_VK_ANSI_U                    0x20
 #define MAC_VK_ANSI_LeftBracket          0x21
 #define MAC_VK_ANSI_I                    0x22
 #define MAC_VK_ANSI_P                    0x23
 #define MAC_VK_ANSI_L                    0x25
 #define MAC_VK_ANSI_J                    0x26
 #define MAC_VK_ANSI_Quote                0x27
 #define MAC_VK_ANSI_K                    0x28
 #define MAC_VK_ANSI_Semicolon            0x29
 #define MAC_VK_ANSI_Backslash            0x2A
 #define MAC_VK_ANSI_Comma                0x2B
 #define MAC_VK_ANSI_Slash                0x2C
 #define MAC_VK_ANSI_N                    0x2D
 #define MAC_VK_ANSI_M                    0x2E
 #define MAC_VK_ANSI_Period               0x2F
 #define MAC_VK_ANSI_Grave                0x32
 #define MAC_VK_ANSI_KeypadDecimal        0x41
 #define MAC_VK_ANSI_KeypadMultiply       0x43
 #define MAC_VK_ANSI_KeypadPlus           0x45
 #define MAC_VK_ANSI_KeypadClear          0x47
 #define MAC_VK_ANSI_KeypadDivide         0x4B
 #define MAC_VK_ANSI_KeypadEnter          0x4C
 #define MAC_VK_ANSI_KeypadMinus          0x4E
 #define MAC_VK_ANSI_KeypadEquals         0x51
 #define MAC_VK_ANSI_Keypad0              0x52
 #define MAC_VK_ANSI_Keypad1              0x53
 #define MAC_VK_ANSI_Keypad2              0x54
 #define MAC_VK_ANSI_Keypad3              0x55
 #define MAC_VK_ANSI_Keypad4              0x56
 #define MAC_VK_ANSI_Keypad5              0x57
 #define MAC_VK_ANSI_Keypad6              0x58
 #define MAC_VK_ANSI_Keypad7              0x59
 #define MAC_VK_ANSI_Keypad8              0x5B
 #define MAC_VK_ANSI_Keypad9              0x5C

 #define MAC_VK_Return                    0x24
 #define MAC_VK_Tab                       0x30
 #define MAC_VK_Space                     0x31
 #define MAC_VK_Delete                    0x33
 #define MAC_VK_Escape                    0x35
 #define MAC_VK_Command                   0x37
 #define MAC_VK_Shift                     0x38
 #define MAC_VK_CapsLock                  0x39
 #define MAC_VK_Option                    0x3A
 #define MAC_VK_Control                   0x3B
 #define MAC_VK_RightCommand              0x36
 #define MAC_VK_RightShift                0x3C
 #define MAC_VK_RightOption               0x3D
 #define MAC_VK_RightControl              0x3E
 #define MAC_VK_Function                  0x3F
 #define MAC_VK_F17                       0x40
 #define MAC_VK_VolumeUp                  0x48
 #define MAC_VK_VolumeDown                0x49
 #define MAC_VK_Mute                      0x4A
 #define MAC_VK_F18                       0x4F
 #define MAC_VK_F19                       0x50
 #define MAC_VK_F20                       0x5A
 #define MAC_VK_F5                        0x60
 #define MAC_VK_F6                        0x61
 #define MAC_VK_F7                        0x62
 #define MAC_VK_F3                        0x63
 #define MAC_VK_F8                        0x64
 #define MAC_VK_F9                        0x65
 #define MAC_VK_F11                       0x67
 #define MAC_VK_F13                       0x69
 #define MAC_VK_F16                       0x6A
 #define MAC_VK_F14                       0x6B
 #define MAC_VK_F10                       0x6D
 #define MAC_VK_ContextualMenu            0x6E
 #define MAC_VK_F12                       0x6F
 #define MAC_VK_F15                       0x71
 #define MAC_VK_Help                      0x72
 #define MAC_VK_Home                      0x73
 #define MAC_VK_PageUp                    0x74
 #define MAC_VK_ForwardDelete             0x75
 #define MAC_VK_F4                        0x76
 #define MAC_VK_End                       0x77
 #define MAC_VK_F2                        0x78
 #define MAC_VK_PageDown                  0x79
 #define MAC_VK_F1                        0x7A
 #define MAC_VK_LeftArrow                 0x7B
 #define MAC_VK_RightArrow                0x7C
 #define MAC_VK_DownArrow                 0x7D
 #define MAC_VK_UpArrow                   0x7E




#endif /* JGWinKeyboardDefault_h */
